package com.juli.school.service.impl;

import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.juli.school.dao.entity.Miss;
import com.juli.school.dao.entity.Pub;
import com.juli.school.dao.mapper.MissMapper;
import com.juli.school.service.CommonService;
import com.juli.school.service.bo.MissBo;
import com.juli.school.service.utils.BeanUtils;
import com.juli.school.utils.core.model.CommonResp;
import com.juli.school.utils.core.model.ListResp;
import com.juli.school.utils.core.model.PageResp;
import com.juli.school.utils.log.annotation.DigestLog;

/**
 * @Description: 寻物/失物业务处理
 * @author gaoxiang
 * @date 2017年8月24日 下午10:07:04
 */
@Service
public class MissService implements CommonService<MissBo> {
	
	private static final Logger logger = LoggerFactory.getLogger(MissService.class);
	
	@Resource
	MissMapper missMapper;
	
	@Resource
	PubService pubService;
	
	/**
	 * @Description: 新增失物招领信息
	 * @author gaoxiang
	 * @date 2017年11月17日 下午2:51:40
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> add(MissBo missBo) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			// 先保存总的 发布信息表
			Pub pub = pubService.add(missBo);
			BeanUtils.copyProperties(missBo, pub);
			// 再保存详细失物招领信息
			missMapper.insert(missBo);
			commonResp.setData(missBo.getSnStamp());
			commonResp.success();
		} catch (Exception e) {
			logger.error("新增失物招领信息异常", e);
			commonResp.exception("新增失物招领信息异常" + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 删除失物招领信息
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:40:06
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> delete(String snStamp, String stuId) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			pubService.deleteBySnStamp(snStamp, stuId);
			missMapper.deleteBySnStamp(snStamp);
			commonResp.success();
		} catch (Exception e) {
			logger.error("删除失物招领信息异常", e);
			commonResp.exception("删除失物招领信息异常" + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 更新失物招领发布信息
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:41:33
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> update(MissBo missBo) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			// 先更新总的 发布信息表
			Pub pub = pubService.update(missBo);
			BeanUtils.copyProperties(missBo, pub);
			// 再更新详细失物招领信息
			missMapper.update(missBo);
			commonResp.success();
			commonResp.setData(missBo.getSnStamp());
		} catch (Exception e) {
			logger.error("更新失物招领信息异常", e);
			commonResp.exception("更新失物招领信息异常 " + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 获取失物招领详情
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:43:22
	 */
	@DigestLog
	public CommonResp<MissBo> detail(Pub req) {
		CommonResp<MissBo> commonResp = new CommonResp<MissBo>();
		try {
			MissBo missBo = new MissBo();
			// 先查询发布信息总表
			Pub detail = pubService.detail(req);
			BeanUtils.copyProperties(missBo, detail);
			// 如果有多余的字段，请查询详情表
			Miss miss = missMapper.getBySnStamp(detail.getSnStamp());
			missBo.setPerson(miss.getPerson());
			missBo.setPhone(miss.getPhone());
			commonResp.setData(missBo);
			commonResp.success();
		} catch (Exception e) {
			logger.error("获取发布信息详情发生异常", e);
			commonResp.exception("获取发布信息详情发生异常" + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 分页查询失物信息
	 * @author gaoxiang
	 * @date 2017年8月25日 下午11:36:40
	 */
	public CommonResp<PageResp<MissBo>> listPage(MissBo missBo) {
		CommonResp<PageResp<MissBo>> commonResp = new CommonResp<PageResp<MissBo>>();
		CommonResp<PageResp<Pub>> listPage = pubService.listPage(missBo);
		BeanUtils.copyProperties(commonResp, listPage);
		PageResp<MissBo> pageResp = new PageResp<MissBo>();
		List<MissBo> list = new ArrayList<MissBo>();
		for (Pub pub : listPage.getData().getList()) {
			MissBo missBoBean = new MissBo();
			Miss miss = missMapper.getBySnStamp(pub.getSnStamp());
			BeanUtils.copyProperties(miss, pub);
			BeanUtils.copyProperties(missBoBean, miss);
			list.add(missBoBean);
		}
		pageResp.setPage(missBo.getPage());
		pageResp.setList(list);
		commonResp.setData(pageResp);
		return commonResp;
	}
	
	public CommonResp<ListResp<Pub>> list(MissBo missBo) {
		return pubService.list(missBo);
	}
}
